package v1

import (
	"devops-super/api"
	"devops-super/internal/model/entity"
	"github.com/gogf/gf/v2/frame/g"
)

// UserConfigGetPageLstReq 分页获取用户配置列表请求
type UserConfigGetPageLstReq struct {
	g.Meta `method:"get" path:"/user-config/page-list" summary:"分页获取用户配置列表" tags:"用户配置"`
	*api.PageLstReq
	UserId    int64  `json:"userId" in:"query"`    // 用户ID筛选
	GroupName string `json:"groupName" in:"query"` // 配置组名筛选
	ConfigKey string `json:"configKey" in:"query"` // 配置键筛选
}

// UserConfigGetPageLstRes 分页获取用户配置列表响应
type UserConfigGetPageLstRes struct {
	*api.PageLstRes[*entity.UserConfig]
}

// UserConfigAddReq 新增用户配置请求
type UserConfigAddReq struct {
	g.Meta      `method:"post" path:"/user-config" summary:"新增用户配置" tags:"用户配置"`
	UserId      int64  `v:"required#用户ID不能为空" json:"userId"`
	GroupName   string `v:"required#配置组名不能为空" json:"groupName"`
	ConfigKey   string `v:"required#配置键不能为空" json:"configKey"`
	ConfigValue string `v:"required#配置值不能为空" json:"configValue"`
	Remark      string `json:"remark"`
}

// UserConfigAddRes 新增用户配置响应
type UserConfigAddRes struct{}

// UserConfigUptReq 更新用户配置请求
type UserConfigUptReq struct {
	g.Meta      `method:"put" path:"/user-config/{id}" summary:"更新用户配置" tags:"用户配置"`
	Id          int    `v:"min:1#配置ID必须" path:"id"`
	UserId      int64  `v:"required#用户ID不能为空" json:"userId"`
	GroupName   string `v:"required#配置组名不能为空" json:"groupName"`
	ConfigKey   string `v:"required#配置键不能为空" json:"configKey"`
	ConfigValue string `v:"required#配置值不能为空" json:"configValue"`
	Remark      string `json:"remark"`
}

// UserConfigUptRes 更新用户配置响应
type UserConfigUptRes struct{}

// UserConfigDelReq 删除用户配置请求
type UserConfigDelReq struct {
	g.Meta `method:"delete" path:"/user-config/{id}" summary:"删除用户配置" tags:"用户配置"`
	Id     int `v:"min:1#配置ID必须" path:"id"`
}

// UserConfigDelRes 删除用户配置响应
type UserConfigDelRes struct{}

// UserConfigGetOneReq 获取单条用户配置请求
type UserConfigGetOneReq struct {
	g.Meta `method:"get" path:"/user-config/getOne" summary:"获取单条用户配置" tags:"用户配置"`
	Id     int `v:"min:1#配置ID必须" json:"id"`
}

// UserConfigGetOneRes 获取单条用户配置响应
type UserConfigGetOneRes struct {
	Info *entity.UserConfig `json:"info"`
}

// UserConfigGetOptionsReq 获取用户配置选项请求
type UserConfigGetOptionsReq struct {
	g.Meta     `method:"get" path:"/user-config/getOptions" summary:"获取用户配置选项" tags:"用户配置"`
	UserId     int64  `json:"userId"`     // 用户ID筛选
	GroupName  string `json:"groupName"`  // 配置组名筛选
	FieldKey   string `json:"fieldKey"`   // 自定义value字段
	FieldLabel string `json:"fieldLabel"` // 自定义label字段
}

// UserConfigGetOptionsRes 获取用户配置选项响应
type UserConfigGetOptionsRes struct {
	Options []*api.FormOptionsItem `json:"options"`
}

// GetGroupConfigsReq 获取配置组请求
type GetGroupConfigsReq struct {
	g.Meta    `method:"get" path:"/user-config/getGroupConfigs" summary:"获取配置组" tags:"用户配置"`
	UserId    int    `v:"min:1#用户ID必须" json:"userId" in:"query"`
	GroupName string `v:"required#配置组名必须" json:"groupName" in:"query"`
}

// GetGroupConfigsRes 获取配置组响应
type GetGroupConfigsRes struct {
	Configs   []*entity.UserConfig `json:"configs"`
	UpdatedAt string               `json:"updatedAt"`
}

type SetGroupConfigsReq struct {
	g.Meta    `method:"post" path:"/user-config/setGroupConfigs" summary:"保存配置组" tags:"用户配置"`
	UserId    int    `v:"min:1#用户ID必须" json:"userId"`
	GroupName string `v:"required#配置组名必须" json:"groupName"`
	Configs   []struct {
		ConfigKey   string `v:"required#配置键必须" json:"configKey"`
		ConfigValue string `v:"required#配置值必须" json:"configValue"`
		ConfigDesc  string `json:"configDesc"`
	} `v:"required#配置项不能为空" json:"configs"`
}

type SetGroupConfigsRes struct{}
